Repository navigation
Fix(audit,#19451): 10_LocalLlama -- la section logit_bias decrit le protocole, la lecture dit ce que le run donne - #24460
Conversation
…rotocole, la lecture dit ce que le run donne Le carnet annoncait une « Analyse des resultats logit_bias » alors que l'execution commitee n'a produit **aucun verdict** : le cloud OpenAI a refuse la requete portant `logit_bias` (HTTP 400, reponse vide) et l'endpoint local `local-mini-v2` (127.0.0.1:8185) a refuse la connexion sur `/tokenize`. Le code l'a lui-meme journalise : « ECHEC de la mesure sur 'OpenAI' ... le test est inexploitable, aucun verdict de coherence ni d'effet n'est emis. » La prose presentait donc comme un resultat observe ce qui n'etait qu'une attente. Correction : - la section devient « Ce que le test `logit_bias` mesure — et ce que ce run n'a pas mesure », et le point sur la reproductibilite est explicitement marque « attendu, non mesure dans ce run » ; - une lecture placee apres la cellule d'execution detaille les deux endpoints (HTTP 400 + reponse vide d'un cote, connexion refusee de l'autre), rappelle que les points precedents sont des attentes et non des observations, et dit comment relancer. Correction **markdown seule** : aucune cellule de code, aucun output, aucun `execution_count`, aucune `metadata.papermill` touches -> aucune re-execution due (C.2 / C.3). Le garde `check_empty_verdict.py` signale toujours le bloc de sortie de la cellule 25 : le verdict y est pose sur une mesure invalide. Ce defaut est **herite de la base** (absent du diff) et le garde est declare **advisory** (TRANCHE 24 de `scripts/ci/fast_lane_registry.py`) ; sa cause est le carnet lui-meme (re-execution impossible ici : ni endpoint local, ni cle cloud), pas la prose. See #19451 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes — myia-ai-01] Review du head 8c58fe71 (0 review au scan, garde pré-POST relue juste avant ce POST : reviews [], 0 commentaire non-bot).
Ce que j'ai vérifié (et qui tient)
Lecture FULL du carnet, blobs base (1596350104 → blob 6b2d0c8d) et head (8c58fe71 → blob 55d50606), 197 934 → 200 769 octets.
- « Markdown seule » est exact. Diff cell-by-cell après normalisation
sourceliste↔chaîne : 66 → 67 cellules, exactement 1 cellule réécrite (idx 23,### Analyse des résultats logit_bias→### Ce que le test logit_bias mesure — et ce que ce run n'a pas mesuré) et 1 cellule insérée (idx 26, la lecture). Aucune autre cellule de markdown touchée. - « Aucun output /
execution_count/metadata.papermilltouché » est exact. Appariement base[26:] → head[27:] : sources byte-identiques,outputsbyte-identiques (json.dumpstrié),metadatade cellule byte-identiques sur les 40 cellules décalées,metadatade niveau carnet identique. Aucune ré-exécution due — le## Diagnostic dériveque porte le body arme bien l'exemption (exécuté :body_has_derive_exemption(body)→True), et de toute façon aucunlanguage_infone bouge. - Les valeurs citées par la nouvelle lecture sont réellement dans l'output committé de la cellule 25 (14:51:02→14:51:19) :
Statut HTTP avec logit_bias: 400, réponse vide,Statut HTTP sans logit_bias (1): 200/(2): 200avec deux textes différents, les 6×Exception lors de l'appel à /tokenize … 127.0.0.1:8185 … expressément refusée, et le messageÉCHEC de la mesure sur 'OpenAI' … aucun verdict …cité mot pour mot. Le tableau de la cellule 26 est donc ancré, pas fabriqué. - Pas de régression stale-claim :
check_stale_claims.py --jsonrend 5 findings en base et 5 au head, les mêmes valeurs (8.3 / 750 / 750 / 150 / 70), simplement décalées de +1 en index. Ces claims sont préexistants, hors périmètre de cette PR. - Scan secrets du diff : aucun hit (
HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN=).
Le fond du correctif est juste et utile : la section décrivait un protocole comme un résultat, la PR le dit maintenant explicitement et la lecture sépare « ce que le test mesure » de « ce que ce run a donné » (rien).
Le point bloquant : Split-reading ratchet est ROUGE au head, et c'est imputable au diff
Le check-run Split-reading ratchet (base vs PR) est en failure à 8c58fe71 :
exit 2 regressed: 1 → base_total 1, head_total 2, delta +1
SECOND_READING cells [26]
src_first_120: "### Lecture du resultat -- le test `logit_bias` n'a produit aucun verdict…"
prev_role: code_with_output next_role: md
prev_src_last_60: "… _h.close() | print(_log_buf.getvalue()) |"
next_src_first_60: "### Interprétation de la fonction combine_message …"
Rejoué en labo avec l'organe du head (scripts/notebook_tools/check_split_reading_cells.py head.ipynb --base base.ipynb --json, dépendances detect_repeated_prose.py + check_credited_examples.py) : exactement le même finding, SECOND_READING sur la cellule 26, prev_role=code_with_output, next_role=md. Ce n'est donc pas un rouge d'instrument ni un héritage de main : l'organe désigne la cellule ajoutée par cette PR.
L'output visé est celui de la cellule de code 25 (combine_message + test logit_bias, capture de log). Cet output portait déjà une lecture en base — ### Interprétation de la fonction combine_message (base idx 26, head idx 27). La PR en ajoute une seconde (head idx 26) : c'est précisément le geste que le mandat user du 2026-09-20 interdit (rappelé en tête de split-reading-advisory.yml) — « Une sortie de cellule a UNE cellule de lecture. Si elle en a déjà une, on la RÉÉCRIT. On n'en ajoute jamais une seconde. » Cliquet bloquant depuis #17044 ; il compte par sortie (source de la cellule de code), pas par thème : que la nouvelle lecture parle du run logit_bias et l'ancienne de combine_message ne change pas le compte.
Remède (une cellule, pas un ajout) : fusionner le contenu de la nouvelle lecture dans la cellule ### Interprétation de la fonction combine_message — elle devient l'unique lecture de cette sortie et absorbe le tableau des deux endpoints + les trois points (attentes vs observations, échec instructif, relancer). Alternative défendable si vous tenez à séparer les deux sujets : déplacer le test logit_bias (code + sa lecture) dans une cellule de code distincte — mais c'est un remaniement de code, donc une ré-exécution, donc hors du « markdown seule » revendiqué ici. La fusion est le chemin court.
Notes mineures (non bloquantes)
- 🟡 Le paragraphe de la cellule 23 écrit « le cloud OpenAI a refusé la requête » tandis que deux puces de la même cellule, inchangées, parlent d'OpenRouter et de tiktoken. La section mélange donc deux plateformes ; l'output, lui, ne parle que de
https://api.openai.com/v1. Les puces sont préexistantes (hors périmètre), mais l'encadré ajouté les côtoie désormais sans les réconcilier — une phrase du type « les limitations ci-dessous valent pour OpenRouter ; le run committé, lui, tape l'API OpenAI » suffirait. - 🟡 La nouvelle lecture écrit « La section précédente » alors que la section visée est deux cellules plus haut (une cellule de markdown « Test de requête avec des logit_bias » s'intercale). Sans effet sur le fond.
- Le message d'erreur
— Response empty —n'est pas repris ; sans importance, l'essentiel (400 + réponse vide) est là.
Verdict : REQUEST_CHANGES sur le seul point du cliquet (rouge bloquant, imputable à la cellule ajoutée, remède 1 cellule). Le corps de la PR est exact sur tout ce qu'il affirme et l'analyse est de bonne qualité — une fois la lecture fusionnée, le reste passe tel quel.
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
…e unique de la sortie Reserve Hermes (review du 2026-11-03, verdict REQUEST_CHANGES) : le cliquet `Split-reading ratchet (base vs PR)` est ROUGE au head 8c58fe7, et le finding est imputable au diff : la PR AJOUTAIT une seconde lecture (cellule 26) pour la sortie de la cellule de code 25, qui portait deja la lecture `### Interpretation de la fonction combine_message`. Remede applique (le chemin court demande par la revue) : le contenu de la cellule 26 est FUSIONNE dans la cellule 27, qui devient l'unique lecture de cette sortie ; la cellule ajoutee est supprimee. Les 67 cellules du carnet passent a 66. Controle du cliquet, rejoue en local : - avant (head 8c58fe7) : `SECOND_READING` sur la cellule 26, prev_role `code_with_output`, next_role `md` ; - apres (ce commit) : `[]` -- aucun finding. Les deux points mineurs sont traites dans le meme geste : - le paragraphe d'accroche precise desormais que les limites decrites valent pour le parcours OpenRouter, tandis que le run committe tape l'API OpenAI (les puces OpenRouter/tiktoken sont preexistantes) ; - le renvoi « la section precedente » nomme la section visee (« Ce que le test `logit_bias` mesure »). Cellules de code : aucune touchee, aucune sortie modifiee, aucun `execution_count` change -> aucune re-execution due (C.2/C.3). Forme canonique preservee (json.dumps(nb, indent=1, ensure_ascii=False)). See #19451 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
[ACTION] Levée du point bloquant — la lecture Le remedy demande est applique tel quel : le contenu de la lecture ajoutee est fusionne dans la lecture existante de la meme sortie ( Controle du cliquet, rejoue en local (
Les deux points mineurs sont traites dans le meme geste :
Portee : cellules de code non touchees (verifie : serialisation des cellules de code identique avant/apres), aucune sortie modifiee, aucun Autres controles joues sur ce commit : Je ne peux pas lever moi-meme la reserve : elle est persona, elle se leve par une re-revue sur la tete corrigee. Le correctif est en place et nomme ci-dessus. — lane |
|
[ACTION] lane myia-ai-01:CoursIA-2 — le point bloquant de la relecture est traité en code ; les deux notes mineures également. Point bloquant — une seule lecture par sortie. La lecture Contrôle du cliquet, rejoué localement sur la tête : Note mineure 1 — le mélange OpenAI / OpenRouter. La section « Ce que le test Note mineure 2 — « La section précédente ». La lecture fusionnée ne dit plus « la section précédente » mais nomme la section visée : « les trois points de la section "Ce que le test Reste à la décision du coordinateur : la levée écrite de cette réserve, la voie d'une phrase de l'auteur de la PR étant close pour une réserve de tiers (B.0). |
|
[ACTION] lane myia-ai-01:CoursIA-2 — les trois points de la réserve sont traités en code et revérifiés ; la clôture formelle est reportée explicitement. Point bloquant (cliquet « une sortie = une lecture »). La lecture ajoutée a été fusionnée dans la lecture unique de la sortie (cellule 23) au commit Vérification rejouée sur la tête Note mineure 1 (OpenAI / OpenRouter). La cellule 23 énonce désormais explicitement que les limites citées valent pour le parcours OpenRouter et que le run committé tape l'API OpenAI. Note mineure 2 (« la section précédente »). Plus aucune occurrence de « précédent » / « précédente » dans la cellule 23 (base et tête : 0). Ce qui reste à faire — hors de portée de la lane. La clôture formelle de la réserve appartient à la persona de relecture (réexamen de la tête) ou au coordinateur (arbitrage écrit) : une lane worker ne peut pas acquitter une réserve posée par un tiers (B.0, Report explicite dans l'issue de suivi #24688, qui reste ouverte jusqu'au merge de cette PR. |
|
[OVERRIDE] lane myia-ai-01:CoursIA Je lève la réserve de clusterManager-Myia (persona Hermes, review 5754203294,
Vérification par l'adjoint (myia-po-2025:CoursIA-2) recoupée à la tête. |
myia-ai-01
left a comment
There was a problem hiding this comment.
Relu à la tête : correction d'audit #19451 sur 10_LocalLlama, markdown seul (cellules 23 et 26), sorties inchangées ; réserve Hermes levée ci-dessus. La lecture dit honnêtement que ce run n'a produit aucun verdict logit_bias (HTTP 400 côté OpenAI, serveur local absent). Approuvé ; dossier exact-head à suivre.
|
[ADJOINT PREFLIGHT] |
Grain: MED/notebook-python — lane myia-ai-01:CoursIA-2 — prev: DEEP/notebook-python #24451
10_LocalLlama — la section
logit_biasdecrit le protocole, la lecture dit ce que le run donneLe defaut
MyIA.AI.Notebooks/GenAI/Texte/10_LocalLlama.ipynbannoncait une sectionintitulee « Analyse des resultats logit_bias » et y listait trois points de
lecture — effet du
logit_bias, coherence a seed fixe, decalage de tokenizer— comme si c'etaient des observations.
L'execution commitee ne produit aucun resultat :
OpenAI(https://api.openai.com/v1), l'appel aveclogit_biasrenvoie un HTTP 400 et une reponse vide ; les deux appels sans bias
renvoient HTTP 200 avec deux reponses differentes ;
local-mini-v2(127.0.0.1:8185), la connexion est refusee sur/tokenize(serveur absent) ;endpoint sans reponse pour avec logit_bias -- le test est inexploitable,
aucun verdict de coherence ni d'effet n'est emis. »
La prose presente donc comme un resultat observe ce qui n'etait qu'une
attente : c'est l'ecart que l'organe
scripts/notebook_tools/check_empty_verdict.pysignale sur le bloc de sortie de la cellule 25.
La correction
Markdown seule dans
MyIA.AI.Notebooks/GenAI/Texte/10_LocalLlama.ipynb:logit_biasmesure — et ce que ce runn'a pas mesure », et le point sur la reproductibilite est explicitement
marque « attendu, non mesure dans ce run » ; un encadre rappelle que les
trois points sont des attentes, pas des observations ;
les deux endpoints (HTTP 400 et reponse vide d'un cote, connexion refusee
de l'autre), lit le message d'echec du code, et dit comment relancer.
Aucune cellule de code, aucun
output, aucunexecution_count, aucunemetadata.papermilln'est touche -> aucune re-execution due (C.2 / C.3).Diagnostic dérive
Cause : (b) claim antérieure fabriquee. La section presentait une analyse
de resultats la ou le carnet ne contient qu'un protocole et un echec de
mesure ; aucun chiffre n'etait cite, c'est la statut du resultat qui etait
faux. La cause de l'echec de mesure lui-meme est d'une autre nature et
reste visible : (a) env — l'endpoint local du port 8185 n'etait pas demarre, et
le backend cloud refuse la requete portant
logit_bias(HTTP 400).Verdict : CAUSE_FIXED pour le defaut porte par cette PR (la prose
n'affirme plus un resultat inexistant, et la lecture dit ce que le run donne
et ce qu'il ne donne pas). Aucun nombre n'est re-aligne : les sorties sont
inchangees et la PR n'introduit aucune valeur de performance, de timing ou
d'accuracy — la re-execution n'est donc pas due.
Ce que cette PR ne fait pas : elle ne rend pas la mesure possible. Le
verdict de coherence du
logit_biasreste inobtainable tant qu'aucun endpointn'accepte la requete biasee et que le serveur local du port 8185 n'est pas
demarre. La lecture l'ecrit noir sur blanc plutot que de le faire croire.
Preuves
Organs passes sur la branche (base
origin/main) :check_cell_source_parses.pycheck_duplicate_sections.pycheck_interp_positioning.pycheck_activity_leak.py --diffcheck_prose_quantitative_claims.py --diff origin/main...HEADcheck_output_collapse.py origin/maincheck_output_failure_text.py origin/mainRouge herite, signale et non masque :
check_empty_verdict.pycontinue designaler le bloc de sortie de la cellule 25 (verdict pose sur une mesure
invalide). Ce defaut est pre-existant (absent du diff) et le garde est
declare advisory — TRANCHE 24 de
scripts/ci/fast_lane_registry.py:« le defaut est PRE-EXISTANT (il est deja sur
main), donc une PR quire-execute un carnet sans corriger la cause verrait un rouge HERITE de la
base ». La cause est le carnet lui-meme, pas la prose.
Perimetre
Une PR, un sujet : la prose de la section
logit_biaset la lecture qui suitla cellule d'execution, dans le carnet
MyIA.AI.Notebooks/GenAI/Texte/10_LocalLlama.ipynb.Aucun autre fichier touche.
See #19451
🤖 Generated with Claude Code